查看原文
其他

硅谷访谈:海盗派掌门人James Bach(上)- 历数软件测试中的自欺欺人

The following article is from TestQ Author 耿晓倩


James Bach 以 <Secrets of a Buccaneer-Scholar: How Self-Education and the Pursuit of Passion CanLead to a Lifetime of Success>一书被很多人熟知,也因为在软件测试行业中创建session based testing而被很多测试工程师拥护和支持。James Bach 1999年自己创办软件测试咨询公司Satisfice,Inc.。同时,作为软件测试协会的董事成员,他在各大软件测试会议中发表各种对测试行业的看法和对测试技术的思考,引发很多从业人员在测试领域的讨论和再思考。他和Bret Pettichord以及Cem Kaner在2001年共同出版的<Lessons Learned In Software Testing>一书更加成为了软件测试工程师的必读书籍,经久不衰。

James Bach = J
Christina Geng 耿晓倩 = C



01

对测试自动化的盲目崇拜会毁掉你测试的有效性


C:如今,各大公司都对测试自动化非常推崇,但是有一个非常有名的自动化测试的悖论 - “杀虫剂效应”。请问,您觉得应该如何保证测试自动化的有效性?


J:“杀虫剂效应”是说:如果你用一种特定的方法发现一种类型的缺陷,那么你就只能发现这种类型的缺陷。如果这类型的缺陷没有了,你也就再也发现不了问题了。同时,所有其他类型的缺陷都会被遗漏。你会错以为你已经很好的检测了系统,因为已经没有缺陷出现了,但是其实你是错的。这是测试自动化存在的问题,因为自动化是用某个具体的方法发现些具体的问题。而人类应该有能力去用更加开阔性的方法发现更多问题。人类甚至可以看到一些我们并没有特地去寻找的问题。所以,杀虫剂效应对于自动化测试,问题更为明显。


但是,它也会作用于手工测试,因为测试人员也是有偏见的。一个非常普遍的例子是,手工测试倾向于测边界值。在我教的测试课程中,边界值也是一个非常流行的技术。问题是:边界值并不会发现很多缺陷。如果你只用边界值,然后没有发现任何问题,你会觉得产品质量很好。


因此,我教测试工程师的一个重要部分是教他们如何在测试的时候分散焦点(defocus)分散焦点是解决杀虫剂效应的一个有效解决办法。分散焦点意思是说不断地改变你的测试方法、测试技术,甚至是测试策略。你也可以用测试工具去实现这一点。


(你知道,我不喜欢用“测试自动化”这个词,因为我觉得测试不能被自动化。当大家说测试自动化的时候,大家的意思其实是自动事实检查fact checking。这些用例在检查特定的事物,所以他们寻找特定事物的失败或者成功。这就是自动检查,但是它完全没有自动化任何人们所做的真正的测试。当作为一个人去做测试的时候,我们不单单的看特定的东西,我们还会看一些线索。我们会去探索一些奇怪的事物和现象。一旦,我觉得有什么蹊跷,我就会深入下去,仔细研究。然后,当然研究会让我发现一些新的在开始的时候我没曾想过的缺陷。机器永远做不到这点,只有人可以。)


如果我做自动化,我通常会随机化我的测试数据。这样,我可以让我的自动化自我更新。我也可以用数据驱动的自动化,那么我所需要做的就是去修改我的测试数据。这样做,我不必要去修改我的自动化工具使用的代码。我也不需要重写自动化测试。这些自动化代码可以一直跑不同的数据库数据,不同的环境,但是相同的测试用例。


C:您觉得,这点和上下文驱动测试类似吗?


J:不。上下文驱动完全是另外一回事。一言以蔽之,上下文驱动测试是你丢掉所谓的“测试最佳实践”,从上下文中审视问题。测试人员都是特训过的人,特训过的人在不同的场景下会使用不同的实践、用不同的技术、不同的方法和不同的工具。相反于记住一种方法做测试,你会掌握不同的技能,在需要的时候使用。你可以说上下文驱动测试是基于人类技巧的一种测试哲学。换一句话说,是工程。因为,这正是工程的定义。一个掌握技能的工程师,一个被特训的工程师,了解一种场景然后用需要的技能去解决这个场景中的问题。


这个和工厂流派的测试(Factory School Of Testing)截然相反。(工厂流派测试更多解释,请参见:http://www.satisfice.com/blog/archives/1364) 工厂流派的测试说技能并不重要。测试并不是考技能,而是遵循规定的步骤。在工厂流派中,他们希望你可以把测试用例都写下来,然后写成测试脚本进行自动化。他们想把人的因素排除在外,正如工厂在工业革命所做的。在上下文驱动领域,我们认为这是个非常错误的想法。首先,它根本不会奏效!它会导致杀虫剂效应。它会导致很昂贵的但是没有效益的测试,同时也会使人失去在其中的作用(dehumanizing)


上下文驱动是以人为中心的。


C:您刚刚提到工厂流派的测试。但是很多公司要用这种方式去说明测试的质量,即测试本身做的怎么样。


J:什么是测试本身做的怎么样?


C:比如,写了多少测试用例,覆盖了多少测试场景?


J:但是这是谎言!他们说这是在说明测试做的怎么样,但是这样做一点都说明不了测试做的怎么样。他们根本不明白什么叫测试质量。如果你说我有500个测试用例,你只是说了一个数字:500。你并不知道500个测试用例是什么。就像你说你旅行了500英里,你可以呈现出来。因为一英里是一个标准的丈量单位。但是如果你说你要旅行500“段”,没有人知道那是什么意思。想象一下,你手里有一块饼干。你把它放在手里,握紧它,然后张开你的手。现在,看看那些手里的饼干渣,你手里面有成千上万个饼干渣。这和之前那块饼干是同一个东西,但是现在他有成千上万个碎屑。但是,这只是存在形式不一样而已。你改变它的存在形式,它仍然是那个饼干。回到测试上:你给了一个测试不同的包装,但是这个测试的作用和那改变包装后的500个测试是一样的。所以,测试用例并不是一个衡量单位


大家觉的是在量化软件测试,但是事实上并不是,这是在愚弄别人。我不喜欢做愚弄别人的事情。尽管我很多时候是使用测试用例的,但是我从来不数测试用例。从1992年开始,我就再也没有数过测试用例了。我保证你可以在硅谷找到一份不需要数测试用例的测试工作。我一直和我的客户说不要数测试用例。


换种说法,我现在五十二岁。当你渐渐变老的时候,有一件事情会发生。你周围的公司是由一些比你年轻人经营的。突然之间,你就知道了为什么那些公司经营的并不是很好;因为是一些孩子在经营这些公司。在我二十岁的时候,我曾想也许那些人知道些我不知道的东西。也许他们有些我不知道的秘密使他们的管理看上去说得过去。现在,在这个行业里面三十年后,我知道了他们并没有什么秘密。


数测试用例的唯一原因就是他们要么是拒绝学习如何管理测试流程或者他们听信了那些拒绝学习的人的话。他们只是不想长大。的确,当我年轻的时候,我也数测试用例,但是我现在长大了。


C:测试用例的数量不能说明测试的有效性,但是它是一种表达测试人员工作量的一种方式。虽然,它有时并不能代表工作本身的价值,有时,我们也用提交的缺陷的数量去评估测试的价值。


J:你用缺陷的数量去衡量测试工作吗?


C:也不只是这样,举例来说,系统测试中,一个缺陷可以非常复杂且非常有价值。


J:你说的太对了。我过去喜欢用缺陷矩阵。当你的项目中有很多缺陷的时候,用缺陷矩阵可以发现很多有趣的东西。你可以做很多图表。你可以基于你做的图表问很多有趣的问题。但是,我认为最重要的事情是,我们应该去讨论这个矩阵;看看这些图表到底能告诉我们什么,去想想我们可以做些什么。这是流程中非常重要的一部分。图表并不能告诉我们图表在表达什么,我们要自己搞清楚图表到底在说什么。 我们也不可能在项目之外找到答案。所以,我们用缺陷的数量来发现问题然后和项目中不同的人讨论这些问题,从而发现如何解决这些问题的办法。


有时大家所提供的图表所表达的建议其实只是个假象。有些人可以制造假的数据或者对一些让他们觉得难堪的数据遮遮掩掩。有些人可以把自己藏在数字后面。你需要警惕,任何管理者和使用度量工具的人都应该知道。管理者需要做的是,降低数字的重要性,这样不会诱导人们用数字去欺骗或者隐藏信息。


衡量大家工作的流程永远都不应该成为目标。缺陷报告是人的一个社交流程,而不是一个物理系统。这不像去度量一个火山的温度。想想看,如果火山可以通过情绪控制自己的地表温度,地质学家人为地在测量温度的地方控制它的岩浆。那么,这个度量就是错误的,而且很愚蠢。火山并不会在乎,只有测量温度的人在乎。


02

人工智能、机器学习等新技术对软件测试的冲击


C:您觉得新技术对测试技术和方法会带来什么样的影响?例如:如何用人工智能或者机器学习去帮助增加测试的有效性和充分性?


J:使用工具前,你要理解这个工具在做什么,才能正确地使用它。如果你不理解工具在做什么,那么你就不能依赖它。你可以使用它,但是不能完全依赖它。我有个工具的例子,我可以用但是我不能完全依赖:孩子。我可以让一个十岁的儿童去找产品里的缺陷。我可以有整个一个教室的孩子,他们的确可以发现一些缺陷。对于他们发现的缺陷,你不会置之不理,你不能说我不能接受这个缺陷,因为它是孩子提的。但是,你并不会因为接受了这些问题,你就觉得你的产品已经被完全测好了。


另外一个问题,你不可能从十岁孩子那里找到答案:“你是怎么发现这个缺陷的?解释一下你所使用的方法,想想你可不可以做的更好。” 这个让孩子做测试的例子说的正是:我们现在所说的人工智能工具做测试。假如你有一个深度学习的工具为你做测试,你和他说:“超级工具,去帮我测一下这个产品。” 他开始启动,哔哔哔......然后说“发现是哪个缺陷”。 这就像是一个孩子为你发现了三个缺陷一样。


当我和你聊是怎么做测试的时候,我可以问你你用了什么技术。你的答案让我慢慢对你建立信任。你说“我用了这个技术,或者那个技术。” 我问你,你可不可以演示你的技术给我看,你说“好,我可以演示”。然后我问你更多关于测试方法或者覆盖率的问题,你可以告诉我你的答案。你的反应会让我对于你在处理这件事情感到越来越放心。


我觉得人们希望找到一个魔法工具,像魔法朋友在小朋友的故事书中一样可以让我们相信它。我叫这个“自动免责”工具。实际上,他就是帮助那些人自动免责的。


我没有看到任何人工智能工具对测试的帮助是显而易见的。我不能相信他们。但是,如果你想有这样的工具。你想相信它,你必须去测试它。这个测试过程会非常昂贵。而这个工具可以测试的范围又会非常的有限。因为,机器学习是基于训练数据,而训练数据是针对特定场景的特定数据。如果你在一个角度去训练一个场景,那么对于任何其他稍微有一点不同的其他场景,它就不适用了。我们应该问:这个系统是怎么被训练的?训练数据是没有偏好的数据吗?因为任何有偏好的数据都会让机器变的有偏好。最后,我们要问自己,我们要依赖它吗?


03

在Jame心目中,理想学校的样子


C:你写了一本书,叫做《Secrets Of a Buccaneer-Scholar》这本书教会我们不同于学校教授与我们的自我学习方法。如果有机会让您去创办一个中学,你觉得最理想的状态下,会是一个怎么样的学校?


J:我心目中理想的教育机构应该像是一个公共图书馆。


想象一个公共图书馆,到处都是各种类型的老师,也有一些课程在进行。任何人任何年纪可以在这里学习任何科目。所有的东西都是由政府付费的。这就是我想要的:由政府注资的教育资源中心。我其实对于今天没有这样的机构觉得有点小惊讶,不过事实上YouTube就是类似的东西。你可以去Youtube学到差不多任何你想学习的东西。


在澳大利亚的悉尼,有一个项目,就是让各个不同年龄段的人去学习如何获得测试工作。全部都是免费的。你只是需要过去,然后完成工作。我非常喜欢这个项目。我也和一个在纽约的叫“Per Scholas”的项目合作。这是我问题答案的一部分。


另一部分答案是,已经有一种学校叫做“Sudbury Democratic School”。你也许没听过,我在科罗拉多拜访过一个。Sudbury学校是由去上学的学生经营的。他们自己创建了很多规则,由学生会议处罚那些违反规则或者改变规则的人。所有的成年人都是来帮忙的。成年人帮助孩子们实现他们所想的。


C:这听上去很有趣! 感谢您与我分享。


参考




敬请期待(下):

硅谷访谈:海盗派掌门人James Bach 访谈(下)- 软件测试职业指南:听听为什么作为成功的独立测试咨询人James却不推荐独立测试咨询工作;杰瑞温伯格对James的职业生涯有哪些影响;他又给年轻人了哪三点从业建议?



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存